package com.senmin.aPrinciple.a4OpenClosedPrinciple.tdemo1;

/**
 * @className: OpenClosedDemo1
 * @author: xpj
 * @create: 2021/6/6
 * @description: 画图形案例
 * 演示：违反了设计模式的OCP原则（违反对扩展开发，对修改关闭）
 */
public class OpenClosedDemo1 {
    public static void main(String[] args) {
        //使用看看存在的问题
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Cricle());
        graphicEditor.drawShape(new Triangle());

    }
}

/**
 *这是一个用于绘图的类
 * 【这个类：就是使用方】
 * 扩展一个提供方的类就可以了，不需要修改这个类，满足开闭原则
 */
class GraphicEditor {
    //接收Shape对象，然后根据type值，来决定绘制不不同的图形
    public void drawShape(Shape s) {
       s.draw();
    }

}


/**
 * 基类：形状类
 */
abstract  class Shape{
    int m_type;
    public abstract void draw(); //抽象方法
}

/**
 * 长方形
 */
class Rectangle extends Shape{
    Rectangle(){
        super.m_type = 1;
    }

    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}


/**
 * 圆形
 */
class Cricle extends Shape{
    Cricle(){
        super.m_type = 2;
    }

    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}


/**
 * 三角形
 */
class Triangle extends Shape{
    Triangle(){
        super.m_type = 3;
    }

    @Override
    public void draw() {
        System.out.println("绘制三角形");
    }
}